package dominio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.CondicionVentaTO;
import dto.ItemListaProveedorTO;
import dto.ListaProveedorTO;

@Entity
@Table(name = "ListaProveedor")
public class ListaProveedor extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@Column(name = "fecha", nullable = false, columnDefinition = "datetime")
	private Date fecha;

	@Column(name = "termino", nullable = false, columnDefinition = "int")
	private int termino;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idLista")
	private List<ItemListaProveedor> items;

	@ManyToMany
	@JoinTable(name = "listas_condiciones", joinColumns = @JoinColumn(name = "idLista"), inverseJoinColumns = @JoinColumn(name = "idCondicion"))
	private List<CondicionVenta> condicionesVenta;

	public ListaProveedor() {
		items = new ArrayList<ItemListaProveedor>();
		condicionesVenta = new ArrayList<CondicionVenta>();
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public int getTermino() {
		return termino;
	}

	public void setTermino(int termino) {
		this.termino = termino;
	}

	public List<ItemListaProveedor> getItems() {
		return items;
	}

	public void agregarItem(ItemListaProveedor item) {
		items.add(item);
	}

	public List<CondicionVenta> getCondicionesVenta() {
		return condicionesVenta;
	}

	public void agregarCondicionVenta(CondicionVenta condicion) {
		condicionesVenta.add(condicion);
	}

	public ListaProveedorTO getDTO() {
		ListaProveedorTO dto = new ListaProveedorTO();
		dto.setId(id);
		dto.setFecha(fecha);
		dto.setTermino(termino);
		for (ItemListaProveedor i : items)
			dto.agregarItem(i.getDTO());
		for (CondicionVenta cv : condicionesVenta)
			dto.agregarCondicionVenta(cv.getDTO());
		return dto;
	}

	public static ListaProveedor fromDTO(ListaProveedorTO dto) {
		if (dto == null)
			return null;
		ListaProveedor l = new ListaProveedor();
		l.setId(dto.getId());
		l.setFecha(dto.getFecha());
		l.setTermino(dto.getTermino());
		for (ItemListaProveedorTO i : dto.getItems())
			l.agregarItem(ItemListaProveedor.fromDTO(i));
		for (CondicionVentaTO cv : dto.getCondicionesVenta())
			l.agregarCondicionVenta(CondicionVenta.fromDTO(cv));
		return l;
	}
}